package com.modong.jianjian.base

import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.LayoutInflater
import android.view.WindowManager
import android.widget.Toast
import androidx.annotation.LayoutRes
import androidx.appcompat.app.AppCompatActivity
import com.gyf.immersionbar.ImmersionBar
import com.metaapp.demo.R
import com.metaapp.demo.custom.IStatusView
import com.metaapp.demo.utils.StatusBarUtils
import kotlinx.android.synthetic.main.activity_root.*

/**
 * Created by chenlei on 2018/7/4.
 * Description :
 */
abstract class BaseActivity : AppCompatActivity() {

    /***
     * 授权接口
     */
//    private var mPermissionListener: PermissionUtils.PermissionCallbacks? = null

    /**
     * 是否使用沉浸式
     */
    protected open val isImmersionBarEnabled: Boolean
        get() = false

    protected open val statusColor: Int
        get() = R.color.color_white

    /**
     * 设置视图id
     */
    protected abstract val layoutId: Int

    /**
     * 获取标题栏高度（用于设置加载状态视图topMargin）
     */
    protected open val titleBarHeight: Float
        get() = resources.getDimension(R.dimen.title_bar_height)

    /**
     * 设置自定义加载状态视图
     */
    protected open val customLoadStatusView: IStatusView?
        get() = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setForbidScreen()
        setScreenOrientation()
        super.setContentView(R.layout.activity_root)
        initContentView()
        initImmersionBar()
        initView()
        setListener()
        initData(savedInstanceState)
        setTitle()

    }

    override fun setContentView(layoutResID: Int) {

    }

    private fun initContentView() {
        initContentView(layoutId)
    }

    private fun initContentView(layoutRes: Int) {
        val contentView = LayoutInflater.from(this).inflate(layoutRes, view_stub_content, false)
        view_stub_content.addView(contentView)
    }

    /**
     * 禁止截屏
     */
    private fun setForbidScreen() {
//        window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);
    }

    override fun onStart() {
        super.onStart()
        //初始化悬浮窗
//        if (!FloatingUtils.checkIfSkip(this)) {
//            FloatingView.get().attach(this)
//        }
    }

    override fun onResume() {
        super.onResume()
    }

    override fun onStop() {
        super.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
    }

    /**
     * 初始化
     */
    protected open fun initImmersionBar() {
        if (isImmersionBarEnabled){
            ImmersionBar.with(this)
                .statusBarDarkFont(true, 0.2f)
                .statusBarColor(statusColor)
                .init()
        }else{
            ImmersionBar.with(this)
                .fitsSystemWindows(true)
                .statusBarView(status_bar_view)
                .statusBarDarkFont(true)   //状态栏字体是深色，不写默认为亮色
                .init()
                    setStatusBar()
        }
    }

    /**
     * 设置状态栏
     */
    protected open fun setStatusBar() {
//        （默认暗色主题）
//        StatusBarUtils.setStatusBarLightMode(this)
        StatusBarUtils.setWindowStatusBarColor(this, statusColor)
    }

    /**
     * 设置屏幕方向（默认竖屏）
     */
    protected open fun setScreenOrientation() {
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    }

    /**
     * 初始化视图
     */
    protected open fun initView() {

    }

    /**
     * 设置view监听
     */
    protected open fun setListener() {

    }

    /**
     * 初始化数据
     */
    open fun initData(savedInstanceState: Bundle?) {

    }

    /**
     * 设置页面标题
     */
    open fun setTitle() {

    }

    open fun longToast(content: String) {
        Toast.makeText(this, content, Toast.LENGTH_LONG).show()
    }

    open fun shortToast(content: String) {
        Toast.makeText(this, content, Toast.LENGTH_SHORT).show()
    }

    /***
     * 动态权限相关-----------------------------------------------------------------------------------
     */


    /**
     * 当userToken错误时的处理
     * （此处做登出操作以及开启登录页面）
     */
    fun onUserTokenError() {
        //TODO
    }

    companion object {
        const val REQUEST_PERMISSION_CODE = 101
    }

}
